package com.huang.future;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

/*
* 异步调用  CompletableFuture
*  异步执行
*   成功回调
*   失败回调
*
* */
public class Demo1 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //发一个请求  没有返回值的异步回调
//        CompletableFuture<Void> completableFuture=CompletableFuture.runAsync(()->{
//            try {
//                TimeUnit.SECONDS.sleep(2);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//            System.out.println(Thread.currentThread().getName()+"  runAsync");
//        });
//        System.out.println("11111");
//
//        completableFuture.get();//  获取阻塞执行结果


        //供给型异步回调
        CompletableFuture<Integer> completableFuture=CompletableFuture.supplyAsync(()->{
            System.out.println(Thread.currentThread().getName()+"  supplyAsync");
            int a=10/0;
                return 1024;
        });
        System.out.println(completableFuture.whenComplete((t, u) -> { //成功
            System.out.println("t--->" + t);   //t  正常的返回结果
            System.out.println("u--->" + u);  // 错误信息
        }).exceptionally((throwable) -> {       //失败
            System.out.println(throwable.getMessage());
            return 1023;
        }).get());


    }
}
